home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
sh9301c.lha
/
Windows(S.106)
/
Listing2.txt
< prev
next >
Wrap
Text File
|
1992-11-20
|
6KB
|
166 lines
#include <windows.h>
#include <string.h>
char szAppName[20]; // Klassen-Name für dieses Window
HWND hInst; // Instanz-Handle
HWND hWndMain; // Window-Handle
// Prototypen (siehe unten)
LONG FAR PASCAL WndProc(HWND, WORD, WORD, LONG);
int nCwRegisterClasses(void);
void CwUnRegisterClasses(void);
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
/***************************************************
* Hier startet das Programm. *
* Diese Funktion wird nur von Windows aufgerufen! *
***************************************************/
MSG msg; // Message-Struktur
int nRc; // Return-Wert von RegisterClasses
strcpy(szAppName, "Demo");
hInst = hInstance;
if(!hPrevInstance)
{
// Wenn es die erste Instanz ist, Klasse registrieren
if ((nRc = nCwRegisterClasses()) == -1)
{
// Wenn Fehler beim Registrieren
MessageBox(NULL, "Konnte Klase nicht registrieren",
"Sorry", MB_ICONEXCLAMATION);
return nRc;
}
}
// Klasse gibt es, also Window anlegen:
hWndMain = CreateWindow(
szAppName, // Name der Applikation
"Text des Titels", // Das sog. Caption
WS_CAPTION | // Hat Titelleiste und
WS_SYSMENU | // System-Menü und
WS_MINIMIZEBOX | // Minimum-Box und
WS_MAXIMIZEBOX | // Maximum-Box und
WS_THICKFRAME | // Malt nicht in Child-Windows
WS_OVERLAPPED, // Kann überlappen
CW_USEDEFAULT, 0, // Default für links oben
CW_USEDEFAULT, 0, // Default für rechts unten
NULL, // Ist keine MDI-Applikation
NULL, // Default ist Klassen-Menü
hInst, // Instanz dieses Windows
NULL); // Kein Struct für WM_CREATE
if(hWndMain == NULL)
{
MessageBox(NULL, "Konnte Window nicht anlegen",
"Sorry", MB_ICONEXCLAMATION);
return 1;
}
ShowWindow(hWndMain, nCmdShow); // Window anzeigen
while(GetMessage(&msg, NULL, 0, 0)) // Endlos
{
TranslateMessage(&msg); // Keys übersetzen
DispatchMessage(&msg); // Message an WndProc
} // bis WM_Quit-Message
// Rückzugsgefechte und Ende
CwUnRegisterClasses();
return msg.wParam;
} // End of WinMain
/***********************************************
* *
* WndProc (Main Window Procedure) *
* *
* Hierher sendet Windows Messages über alle *
* Events, egal ob das User-Aktionen sind oder *
* Windows-Messages. *
***********************************************/
LONG FAR PASCAL WndProc(HWND hWnd, WORD Message,
WORD wParam, LONG lParam)
{
HDC hDC; // Handle für Display-Device-Context
PAINTSTRUCT ps; // Hält PAINT-Informationen
int nRc=0; // Return-Code
switch (Message)
{
case WM_PAINT: // Neuzeichnen evtl. nötig
memset(&ps, 0x00, sizeof(PAINTSTRUCT));
hDC = BeginPaint(hWnd, &ps); // Melde Start
SetBkMode(hDC, TRANSPARENT); // Hintergrund löschen
TextOut(hDC, 20, 20, "Hallo Welt!", 11);
EndPaint(hWnd, &ps); // Melde, daß Painting fertig
break;
case WM_CLOSE: // User schließt Window
DestroyWindow(hWnd); // Window abbauen.
if (hWnd == hWndMain) // Wenn es das letzte ist,
PostQuitMessage(0); // Ende melden
break;
default:
// Für alle Messages, die keine Service-Routine haben,
// Messages an Windows für Default-Prozess zurück:
return DefWindowProc(hWnd, Message, wParam, lParam);
}
return 0L;
} // End of WndProc
/*************************************************
* *
* Generelle Funktion. *
* *
* Registriert alle Klassen aller Windows, *
* die zur Applikation gehören. *
* Return: 0, wenn erfolgreich, sonst Error-Code *
* *
*************************************************/
int nCwRegisterClasses(void)
{
WNDCLASS wndclass; // Struct der Windowsklasse
memset(&wndclass, 0x00, sizeof(WNDCLASS));
// Stuktur laden:
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
wndclass.lpfnWndProc = WndProc;
// Kein Extra-Storage für Klassen- und Windows-Objekte:
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
// Brush für Hintergrund-Löschen anlegen:
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wndclass.lpszMenuName = szAppName; // Menü-Name = App.-Name
wndclass.lpszClassName = szAppName; // Klassen-Name = App.-Name
return RegisterClass(&wndclass); // Registrieren
} // End of nCwRegisterClasses
/********************************************
* CwUnRegisterClasses-Funktion *
* *
* Löscht alle Refrenzen zu den Resourcen *
* und alle Handles und gibt Speicher frei.*
********************************************/
void CwUnRegisterClasses(void)
{
WNDCLASS wndclass;
memset(&wndclass, 0x00, sizeof(WNDCLASS));
UnregisterClass(szAppName, hInst);
}